<template>
  <section>中介者模式</section>
</template>

<script>
/**
 * @Description:中介者模式
 * @author ZY
 * @date 2022/11/23 22:41
 */
export default {
  name: "DesignMediator",
  data() {
    return {}
  },
  created() {
    console.log('*******中介者模式开始********')
    this.main()
    console.log('*******中介者模式结束********')
  },
  methods: {
    /*
    * 中介者模式：解除对象与对象之间的紧耦合关系。增加一个中介者对象后，所有的 相关对象都通过中介者对象来通信，而不是互相引用，所以当一个对象发生改变时，
    * 只需要通知 中介者对象即可。中介者使各对象之间耦合松散，而且可以独立地改变它们之间的交互。中介者
      模式使网状的多对多关系变成了相对简单的一对多关系（类似于观察者模式，但是单向的，由中介者统一管理。）
      * 系统中对象之间存在比较复杂的引用关系，导致它们之间的依赖关系结构混乱而且难以复用该对象
        想通过一个中间类来封装多个类中的行为，而又不想生成太多的子类。
    * */
    main() {
      class A {
        constructor() {
          this.number = 0
        }
        setNumber(num, m) {
          this.number = num
          if (m) {
            m.setB()
          }
        }
      }
      class B {
        constructor() {
          this.number = 0
        }
        setNumber(num, m) {
          this.number = num
          if (m) {
            m.setA()
          }
        }
      }
      class Mediator {
        constructor(a, b) {
          this.a = a
          this.b = b
        }
        setA() {
          let number = this.b.number
          this.a.setNumber(number * 10)
        }
        setB() {
          let number = this.a.number
          this.b.setNumber(number / 10)
        }
      }

      let a = new A()
      let b = new B()
      let m = new Mediator(a, b)
      a.setNumber(10, m)
      console.log(a.number, b.number)
      b.setNumber(10, m)
      console.log(a.number, b.number)
    }
  }
}
</script>

<style scoped>

</style>
